#include<iostream>
#include<memory>  //智能指针：能自动管理 堆上对象 的指针



class Test
{
private:

public:
    Test(){std::cout<<"构造函数\n";}
    void show()
    {
        std::cout<<"show\n";
    }
    ~Test()
    {
        std::cout<<"析构函数\n";
    }
};




int main()
{


    //独占指针  unique_ptr
    //一块堆上内存 只有一个指针进行管理
    //不允许拿 裸指针，更不能释放裸指针
    //不能混用 裸指针 和 智能指针
    // std::unique_ptr<Test> ptr = std::make_unique<Test>();
    // ptr->show();

    

    //共享指针  shared_ptr 

    std::shared_ptr<Test> p1 = std::make_shared<Test>();
    //引用指示器，标志着有多少指针 指向这块内存
    std::cout<<p1.use_count()<<std::endl;
    
    std::shared_ptr<Test> p2 = p1;



    //弱指针  weak_ptr

    //类的内部 用独占指针  
    return 0;
}



